package entities;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.SQLException;
import java.util.List;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import bd.ConexBD;
import clases.Cliente;
import clases.Empleado;
import clases.FondoMenu;

/**
 * Ventana encargada de gestionar la lista de clientes y mostrar el panel de atributos de los clientes
 */
	public class VentanaGestionClientes extends JFrame implements ActionListener, ListSelectionListener, MouseListener{
		

		private static final long serialVersionUID = -3654056661942228488L;
		
		Ventana v;
		private JPanel panelSuperior;
		private JPanel panelCentral;
		private JPanel panelIzquierdo;
		private JPanel panelBotonera;
		
		private JList lnombres;
		JScrollPane scrollListaNombre;
		private JScrollPane scrollListaNombre2;
		
		private JButton bNuevoCliente;
		private JButton bModificar;
		private JButton bBorrarCliente;
		private JButton bMenu;
		
		public VentanaGestionClientes(Ventana ventana){
			
			v = ventana;
			this.setDefaultCloseOperation(EXIT_ON_CLOSE);
			FondoMenu fondo=new FondoMenu(); // cambio de imagen a la ventana
			getContentPane().add(fondo, BorderLayout.CENTER);
			this.setVisible(true);
			this.setBounds(Toolkit.getDefaultToolkit().getScreenSize().width/2-800/2,Toolkit.getDefaultToolkit().getScreenSize().height/2-600/2, 800, 600);
			
			panelSuperior=  new JPanel();
			panelSuperior.setBackground(Color.WHITE);
			panelSuperior.setVisible(true);
			panelSuperior.setOpaque(false);
			
			panelCentral=  new JPanel();
			panelCentral.setBackground(Color.WHITE);
			panelCentral.setVisible(true);
			panelCentral.setOpaque(false);
			
			panelIzquierdo=  new JPanel();
			panelIzquierdo.setBackground(Color.WHITE);
			panelIzquierdo.setVisible(true);
			panelIzquierdo.setOpaque(false);
			
			panelBotonera=  new JPanel();
			panelBotonera.setBackground(Color.WHITE);
			panelBotonera.setVisible(true);
			panelBotonera.setOpaque(false);
			
			
			bNuevoCliente = new JButton("Nuevo Cliente");
			bNuevoCliente.addActionListener(this);
			
			bModificar = new JButton("Modificar Datos");
			bModificar.addActionListener(this);
			
			bBorrarCliente = new JButton("Borrar Cliente");
			bBorrarCliente.addActionListener(this);
			
			bMenu = new JButton("Inicio");
			bMenu.addActionListener(this);
			
			
			
			fondo.setLayout(new BorderLayout());
			fondo.add("North",panelSuperior);
			fondo.add("Center",panelCentral);
			fondo.add("West",panelIzquierdo);
			
			panelSuperior.add(panelBotonera);
			
			
			panelBotonera.add(bNuevoCliente);
			panelBotonera.add(bModificar);
			panelBotonera.add(bBorrarCliente);
			panelBotonera.add(bMenu);
			
					
			lnombres= new JList(); 
					
			cargarLista();
			
			
			scrollListaNombre = new JScrollPane( lnombres, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
			panelIzquierdo.setLayout( new BorderLayout() );
			panelIzquierdo.setOpaque(false); 
			panelIzquierdo.add( scrollListaNombre, "Center" );
			lnombres.addListSelectionListener(this);
			lnombres.addMouseListener(this);
			fondo.add("West",panelIzquierdo);		
						
			
		}
			
	
		public void consultaCliente(){
			  String nombre= (String) lnombres.getSelectedValue();
		      ConexBD prueba = ConexBD.getInstance();
				
				try {
					prueba.conectar();
					Cliente cliente = prueba.consultaCliente(nombre);		
					PanelFichaCliente panelCliente = new PanelFichaCliente (cliente);
					panelCentral.removeAll();
					panelCentral.add(panelCliente);
					panelCentral.updateUI();
					panelCentral.repaint();
							
					prueba.desconectar();
					
				} catch (ClassNotFoundException | SQLException e) {
					// TODO Auto-generated catch block
					System.out.println("Algun error con la conexion BD");
					e.printStackTrace();
				}
			}
		
		
		public void cargarLista(){
			 ConexBD prueba = ConexBD.getInstance();
				
				try {
					prueba.conectar();
					List<Cliente> listaClientes = prueba.listaClientes();
					DefaultListModel modelo = new DefaultListModel();
					for (Cliente p:listaClientes){
						modelo.addElement(p.getRazonSocial());
					    }
					lnombres.setModel(modelo);
					prueba.desconectar();
					
				} catch (ClassNotFoundException | SQLException e) {
					// TODO Auto-generated catch block
					System.out.println("Algun error con la conexion BD");
					e.printStackTrace();
				}
		}
		
		/**
		 * action listener de los botones de arriba
		 */
		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			
			 if (e.getSource().equals(bNuevoCliente)){
				 VentanaNuevoCliente ncli = new VentanaNuevoCliente(this,null);
				 this.setVisible(false);
				 
				 cargarLista();
				
			}
			else if (e.getSource().equals(bModificar)){
				
					if (lnombres.getSelectedIndex()!=-1)
					{
						//modifico los datos
						String nombreCliente = (String) lnombres.getSelectedValue();
						ConexBD prueba = ConexBD.getInstance();
						Cliente cli = null;
						try {
							prueba.conectar();
							cli = prueba.consultaCliente(nombreCliente);
							prueba.desconectar();
							
						} catch (ClassNotFoundException | SQLException e1) {
							// TODO Auto-generated catch block
							System.out.println("Algun error con la conexion BD");
							e1.printStackTrace();
						}
						VentanaNuevoCliente ncli = new VentanaNuevoCliente(this,cli);
						 this.setVisible(false);
						
					}	
					else{
						JOptionPane.showMessageDialog (this,"Tienes que seleccionar un empleado de la lista");
					}
			
			}else if(e.getSource().equals(bMenu)){
				this.setVisible(false);
				v.setVisible(true);
				
			}else if(e.getSource().equals(bBorrarCliente)){
				
				String nombre= (String) lnombres.getSelectedValue();
				 
				 if (lnombres.getSelectedIndex()!=-1)
					{
				 
		         ConexBD prueba = ConexBD.getInstance();
					
					try {
						prueba.conectar();
						Cliente cliente = prueba.consultaCliente(nombre);				
						prueba.borrarCliente(cliente);
						
						prueba.desconectar();
						
						JOptionPane.showMessageDialog (this,"Cliente borrado de la base de datos");
						cargarLista();
												
					} catch (ClassNotFoundException | SQLException e1) {
						// TODO Auto-generated catch block
						System.out.println("Algun error con la conexion BD");
						e1.printStackTrace();
					}
					}else{
						JOptionPane.showMessageDialog (this,"Tienes que seleccionar un empleado de la lista");
					}
			}
							
				
				
				
			}
			
		
	@Override
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub
		this.consultaCliente();
		panelCentral.updateUI();
		this.repaint();
	}


	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}


	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}


	@Override
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}


	@Override
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}


	@Override
	public void valueChanged(ListSelectionEvent arg0) {
		// TODO Auto-generated method stub
		
	}

}
